
/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"2312C07E-2952-4A7F-8B67-0B93360242A8"}
 */
function cargar(event) {
	if (!verificarTablas())
	{
		globals.DIALOGS.showWarningDialog('Aviso','Las tablas no están vacías','OK')
		return
	}
	/** @type {plugins.file.JSFile}*/
	var arch = plugins.file.showFileOpenDialog(1, null,  false,  new Array ("TXT,CSV","txt","csv"));
	if (arch != null)
	{
		var fr = new Packages.java.io.FileReader(arch.getAbsolutePath());
		var br = new Packages.java.io.BufferedReader(fr);
		/** @type {String} */ 
		var linea = br.readLine()
		
		if (linea == null)
		{
			br.close()
			fr.close()
			globals.DIALOGS.showWarningDialog('Aviso','El archivo está vacío','OK')
			return
		}
		else
		{
			databaseManager.startTransaction()
			while (linea != null)
			{
				var $datos = linea.split(';')
				if ($datos.length != 9)
				{
					br.close()
					fr.close()
					databaseManager.rollbackTransaction()
					globals.DIALOGS.showWarningDialog('Aviso','El archivo tiene un formato incorrecto','OK')
					return
				}
				
				if ($datos[0] == 0)
				{
					application.output('Capitulo igual a 0')
				}
				else
				{
					if ($datos[1] == 0)
					{
						altaCapitulo($datos)
					}
					else
					{
						if ($datos[2] == 0)
						{
							altaSubCapitulo($datos)
						}
						else
						{
							if ($datos[3] == 0)
							{
								altaRubro($datos)
							}
							else
							{
								altaCuenta($datos)
							}
						}
					}
				}			
				linea = br.readLine()
			}
		}
		br.close()
		fr.close()
		if (databaseManager.commitTransaction())
			globals.DIALOGS.showInfoDialog('Aviso','El proceso terminó exitosamente','OK')
		else
		{
			databaseManager.rollbackTransaction()
			globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al intentar grabar','OK')
		}
	}
}

/**
 * @properties={typeid:24,uuid:"BC1B674D-BC89-459A-921F-652C35B93B5C"}
 */
function verificarTablas()
{
	var $tablas = ['capitulo','subcapitulo','rubro','cuentas']
	for (var i = 0 ; i < $tablas.length ; i++)
	{
		var $sql = 'SELECT empresa FROM ' + $tablas[i] + ' WHERE empresa = ?'
		var $args = [globals.gUservID]
		var $ds = databaseManager.getDataSetByQuery('contable',$sql,$args,1)
		if ($ds.getMaxRowIndex() != 0)
			return false
	}
	
	return true
}

/**
 * @param {Array<String>} datos
 * 
 * @properties={typeid:24,uuid:"2315E2FC-2B0E-4472-A28C-E8D3BD709B8F"}
 */
function altaCapitulo(datos)
{
	var $sql = 'INSERT INTO capitulo(codigo, nombre, empresa) VALUES (?, ?, ?)'
	var $args = [datos[0]*1,datos[5].substring(1,datos[5].length -1),globals.gUservID]
	if (!plugins.rawSQL.executeSQL('contable','capitulo',$sql,$args))
	{
		application.output('Error en capitulo : '+datos)
		application.output(plugins.rawSQL.getException())
	}
}

/**
 * @param {Array<String>} datos
 * 
 * @properties={typeid:24,uuid:"0C033AD8-EC02-447B-8B5A-B7F7CA32252C"}
 */
function altaSubCapitulo(datos)
{
	var $sql = 'INSERT INTO subcapitulo(empresa, capitulo, codigo, descripcion) VALUES (?, ?, ?, ?)'
	var $args = [globals.gUservID,datos[0]*1,datos[1]*1,datos[5].substring(1,datos[5].length -1)]
	if (!plugins.rawSQL.executeSQL('contable','subcapitulo',$sql,$args))
	{
		application.output('Error en subcapitulo : '+datos)
		application.output(plugins.rawSQL.getException())
	}
}

/**
 * @param {Array<String>} datos
 * 
 * @properties={typeid:24,uuid:"A9F1C19D-7377-47D7-805C-A24C24786848"}
 */
function altaRubro(datos)
{
	var $sql = 'INSERT INTO rubro(empresa, capitulo, subcapitulo, codigo, descripcion) VALUES (?, ?, ?, ?, ?);'
	var $args = [globals.gUservID,datos[0]*1,datos[1]*1,datos[2]*1,datos[5].substring(1,datos[5].length -1)]
	if (!plugins.rawSQL.executeSQL('contable','rubro',$sql,$args))
	{
		application.output('Error en rubro : '+datos)
		application.output(plugins.rawSQL.getException())
	}
}

/**
 * @param {Array<String>} datos
 * 
 * @properties={typeid:24,uuid:"22687432-8593-4644-9CAB-F44EC1A65146"}
 */
function altaCuenta(datos)
{
	var $capitulo 		= datos[0]*1
	var $subcapitulo 	= datos[1]*1
	var $rubro 			= datos[2]*1
	var $cuenta 		= datos[3]*1
	var $subcuenta 		= datos[4]*1
	var $descripcion	= datos[5].substring(1,datos[5].length -1)
	
	var $sub
	if ($subcuenta != 0)
	{
		$sub = utils.numberFormat($subcuenta,"0000")
	}
	else
	{
		$sub = "         "
	}
	
	if ($descripcion.length > 80)
	{
		application.output('Error en cuenta : DESCRIPCION mayor a 80 caracteres : '+ datos)
		return
	}
	var $cuenta_busca 	= utils.numberFormat($capitulo,"#") + utils.numberFormat($subcapitulo,"#" ) + 
		utils.numberFormat($rubro,"#") + utils.numberFormat($cuenta,"0000") + $sub;

	var $cuenta_formato = utils.numberFormat($capitulo,"#")+"."+utils.numberFormat($subcapitulo,"#")
		+"."+utils.numberFormat($rubro,"#")+"."+utils.numberFormat($cuenta,"0000") + $sub
	
	var $cuenta_nueva = utils.numberFormat($capitulo,"#")+utils.numberFormat($subcapitulo,"#")+utils.numberFormat($rubro,"#")+
		utils.numberFormat($cuenta,"0000")+ $sub + " " + $descripcion;
	
	var $cuenta_impresion = utils.numberFormat($capitulo,"#")+ utils.numberFormat($subcapitulo,"#")+
		utils.numberFormat($rubro,"#")+ utils.numberFormat($cuenta,"0000")+ $sub + " " + $descripcion;

	var $sql = 'INSERT INTO cuentas(empresa, capitulo, subcapitulo, rubro, cuenta, subcuenta, descripcion, sinonimo, imputable,  marca_sub, activa, marca_mon, marca_imprimir, cuenta_busca, cuenta_formato, cuenta_nueva, cuenta_impresion) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
	var $args = [globals.gUservID,$capitulo,$subcapitulo,$rubro,$cuenta,$subcuenta,$descripcion,datos[6].substring(1,datos[6].length -1),datos[7]*1,datos[8]*1,1," ",1, $cuenta_busca, $cuenta_formato, $cuenta_nueva, $cuenta_impresion]
	if (!plugins.rawSQL.executeSQL('contable','cuentas',$sql,$args))
	{
		application.output('Error en cuenta : '+datos)
		application.output(plugins.rawSQL.getException())
	}
}